import openpyxl
import os
from openpyxl.utils import get_column_letter

def read_excel_range_as_list_of_dictionary(file_path, sheet_name, _range):
    """
    读取 Excel 文件中指定区域的数据，转换为字典列表
    :param file_path: Excel 文件路径
    :param sheet_name: 工作表名称
    :param _range: 起始单元格（如 'A1:D10'）
    :return: 字典列表，键为列字母（如 'A', 'B'），值为单元格数据
    """
    # 加载工作簿和工作表
    file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), file_path)
    workbook = openpyxl.load_workbook(file_path)
    sheet = workbook[sheet_name]

    start_cell, end_cell= _range.split(':')
    # 获取起始和结束单元格的列索引（从1开始）
    start_col = sheet[start_cell].column  # 起始列的数字索引
    end_col = sheet[end_cell].column  # 结束列的数字索引

    # 生成列字母列表（如 ['A', 'B', 'C']）
    columns = [
        get_column_letter(col)
        for col in range(start_col, end_col + 1)
    ]

    # 遍历区域中的每一行，转换为字典
    data = []
    for row in sheet[start_cell:end_cell]:
        row_dict = {}
        for idx, cell in enumerate(row):
            row_dict[columns[idx]] = cell.value
        data.append(row_dict)

    return data